# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/4/8 8:55'

"""

		现在我们有2015到2017年25万条911的紧急电话的数据，
		请统计出出这些数据中不同类型的紧急情况的次数，
		如果我们还想统计出不同月份不同类型紧急电话的次数的变化情况，应该怎么做呢？


		数据来源：https://www.kaggle.com/mchirico/montcoalert/data

"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Pycharm输出窗口有省略号，数据显示不全解决方法
pd.set_option('display.max_rows', 10)
pd.set_option('display.max_columns', 200)
pd.set_option('display.width', 1000)

# 如果要显示中文标题和坐标表示，需要添加以下两行代码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

print('============================================================================================================')

file_name = './911.csv'

df = pd.read_csv(file_name)
print(df.info())
print('==========================================')
print(df.index)
print('==========================================')
print(df.sample(10))
print('==========================================')
# 方式1：
spt = df.title.str.split(':')
print(type(spt))
print(spt)
# print(df.title.str.split(':')[0]) # 不能直接取 第0个，这样的话，就只能取到 第1条
# print(spt[0]) # # 不能直接取 第0个，这样的话，就只能取到 第1条
print('==========================================')
tmplist = spt.tolist()
cate_list = list(set(j[0] for j in tmplist))

print('type(cate_list):', type(cate_list))
print('cate_list:', cate_list)
print('==========================================')

df_cate = pd.DataFrame(np.zeros((df.shape[0], len(cate_list))), columns=cate_list)

# 效率非常低
# for j in range(df.shape[0]):
# 	cate = df.loc[j, 'title'].split(':')[0]
# 	df_cate.loc[j, cate] = 1

# 效率高
# df_cate[cate] 作为 Series 类型
# ss[df.title.str.startswith(cate)] 通过 startswith 对每一行数据进行判 是否为True ，进行 赋值操作。
for cate in cate_list:
	df_cate[cate][df.title.str.startswith(cate)] = 1

print("==================================================================================")

# 统计每类报警次数
sum_cate = df_cate.sum(axis=0)
print('type(sum_cate):', type(sum_cate))
print('sum_cate:\n', sum_cate)

plt.figure(figsize=(20, 8), dpi=80)
plt.bar(sum_cate.index, sum_cate.values, width=0.2, color='orange')
plt.show()
print('==========================================')

## 最简单的方法！！！！
srs = df.title.str.split(':',expand=True)[0]

grouped = srs.groupby(by = srs.values).count()

print("grouped:\n",grouped)

plt.cla()
plt.bar(grouped.index, grouped.values, width=0.2, color='orange')
plt.show()

print('==========================================')


# 方式2：
# df_cate = df.title.str.extract('([A-Z]+):.*?')
# df_cate.dropna(axis=0, inplace=True)
# print(type(df_cate))
# print(df_cate)


print('==========================================')
